package cn.kgc.spring.dao.staticproxy;

import cn.kgc.spring.dao.OrderDao;
import cn.kgc.spring.dao.impl.OrderDaoImpl;

import java.util.List;

/**
 * @author: mosin
 * @version: v1.0  2022/4/25
 * 通过静态代理对象 代理OrderDaoImpl
 *    创建一个类实现和被代理对象相同的接口，然后将被代理对象注入到代理对象中
 *    优点：
 *      1.实现了在不修改源码的基础上的功能增强
 *    缺点：
 *      1.代理对象要实现和被代理对象相同的接口   局限性
 *      2.增加了需要维护的类   修改了接口  实现类 和代理类都需要修改
 *
 */
public class OrderDaoStaticProxy implements OrderDao {
    private OrderDao orderDao;

    public OrderDaoStaticProxy(OrderDao orderDao){
        this.orderDao = orderDao;
    }

    @Override
    public int saveOrder() {
        System.out.println("订单保存之前添加日志成功");
        orderDao.saveOrder(); // 被代理对象的方法调用   OrderDaoImpl
        System.out.println("订单保存之后添加日志成功");
        return 0;
    }

    @Override
    public int saveOrder(int a) {
        return 0;
    }

    @Override
    public List<Object> selectAll() {
        return null;
    }
}
